package day20170504.ch03;

/**
 * 售票业务操作
 * @author 罗智壕-13424431416
 *
 * 2017年5月4日
 */
public class TicketThread implements Runnable{
	
	/**
	 * 要卖多少张票
	 */
	private static int ticket = 100;
	
	/**
	 * 重写run方法
	 * synchronized使用在方法上面是锁在 对象上面
	 * synchronized在方法做到的事情，synchronized代码块也能做到
	 * synchronized的代码块能做到的事情，方法上面的synchronized未必能做到
	 */
	@Override
	public /*synchronized*/ void run() {
		for(int index=1; index<=100; index++){
			synchronized(TicketThread.class){
				sellTicket();
			}
		}
	}
	
	/**
	 * 处理业务方法
	 */
	@SuppressWarnings("static-access")
	public void sellTicket() {
		if (ticket >= 1) {
			try {
				//获取窗口的名字
				System.out.println(Thread.currentThread().getName() + "：开始售票");
				//进入卖票的时候休息0.1秒
				Thread.currentThread().sleep(10);
				System.out.println("卖出票号为：" + ticket--);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}
